<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="icon" href="../images/favicon.ico" type="image/x-icon" />
    <link rel="shortcut icon" href="../images/favicon.ico" type="image/x-icon" />
    <title>flyingon类演示</title>
    <script type="text/javascript" src="../js/flyingon.js"></script>
</head>
<body>

    <script type="text/javascript">


    //定义基类BaseClass 从Object继承
    var BaseClass = Object.extend(function () {

        
        //定义构造函数
        this.init = function (p1, p2) {

            this.p1 = p1;
            this.p2 = p2;
        };


        //定义实例方法
        this.fn = function () {

            return 'BaseClass';
        };


        //定义布尔型属性,默认值为false
        this.defineProperty('p_boolean', false);


        //定义整数型属性,默认值为0
        this.defineProperty('p_int', 0, {

            dataType: 'int'
        });


        //定义数字型属性,默认值为0
        this.defineProperty('p_float', 0);


        //定义字符型属性,默认值为''
        this.defineProperty('p_string', '');


        //定义只读属性
        this.defineProperty('p_readonly', function () {
            
            return new Date();
        });

    });



    //定义子类ChildClass 从BaseClass继承
    var ChildClass = BaseClass.extend(function (base) {


        //定义构造函数
        this.init = function (p1, p2, p3) {

            //调用父类构造函数
            base.init.call(this, p1, p2);
            this.p3 = p3;
        };


        //重载实例方法
        this.fn = function () {

            //先调用父类的方法
            base.fn.call(this);

            return 'ChildClass';
        };


    });



    //创建对象
    var obj1 = new BaseClass(1, 2);
    var obj2 = new ChildClass(1, 2, 3);


    //类型判断
    obj1.Class === BaseClass; //true
    obj2.Class === ChildClass; //true
    
    //类型检测
    obj2.is(BaseClass) === true; //true
    obj2.is(ChildClass) === true; //true

    //调用实例方法
    obj1.fn() === 'BaseClass'; //true

    //调用继承的实例方法
    obj2.fn() === 'ChildClass'; //true



    //获取属性值
    obj2.p_boolean() === false;    

    //设置属性值 第二个参数表示是否触发变更事件及数据绑定, 默认触发
    obj2.p_boolean(true);

    //自动类型转换
    obj2.p_boolean('2', false);    //true;
    obj2.p_int(3.2);        //3;
    obj2.p_int('3.5');      //3;
    obj2.p_int('3int');     //0
    obj2.p_string(3.2);     //'3.2'

    obj2.p_readonly();      //返回当前时间
    obj2.p_readonly(12);    //无法修改值
    

    //注册全局事件(可优先捕获任意对象触发的事件)
    flyingon.on('my_event', function (e) {

        alert('global event type:' + e.type + ' data:' + e.data);
        
        //停止冒泡
        //e.stop();
    });

    //注册事件(支持事件冒泡)
    obj2.on('my_event', function (e) {

        alert('event type:' + e.type + ' data:' + e.data);
    });


    //触发事件
    obj2.trigger('my_event', 'data', 'dddddd'); //弹出"my_event+dddddd"

    //注销所有my_event全局事件
    flyingon.off('my_event');

    //注销obj3上的所有my_event事件
    obj2.off('my_event');

    //再次触发事件
    obj2.trigger('my_event', 'data', 'dddddd'); //不会弹出对话框

    
    </script>


</body>
</html>